package cn.wen.yinxiu.member.service;

import cn.wen.yinxiu.member.vo.UserFriend;
import cn.wen.yinxiu.member.vo.UserFriendInfo;
import cn.wen.yinxiu.member.vo.UserFriendQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.wen.yinxiu.common.toolkit.PageUtils;
import cn.wen.yinxiu.member.entity.FriendEntity;

import java.util.List;
import java.util.Map;

/**
 * 
 *
 * @ClassName: FriendService
 * @Author 小飞
 * @Email coderwen22@163.com
 * @Date 2023-05-21 22:19:26
 * @Description:
 */
public interface FriendService extends IService<FriendEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 通过用户Id查询该用户的关注ID列表
     * @param userId
     * @return
     */
    List<Long> queryUserFriendIdList(Long userId);

    /**
     * 通过用户Id查询该用户的朋友列表
     * @param userId 用户ID
     * @param page 当前页号
     * @return
     */
    List<UserFriendInfo> queryUserFriendInfoList(Long userId, Integer page);

    /**
     * 通过用户Id，和朋友Id获取状态
     * @param userId
     * @param friendId
     * @return
     */
    FriendEntity queryUserFriendById(Long userId, Long friendId);

    /**
     * 批量添加朋友
     * @param userFriendList
     */
    void addUserFriend(List<UserFriend> userFriendList);

    /**
     * 当前用户粉丝列表
     * @param userId
     * @param page
     * @return
     */
    List<UserFriendInfo> queryUserFansInfoList(Long userId, Integer page);

    /**
     * 将当前用户在粉丝关注中移除
     * @param userId
     * @param fansId
     * @return
     */
    boolean deleteUserFriendFromFansRelation(Long userId, Long fansId);

    /**
     * 取消关注
     * @param userId
     * @param friendId
     * @return
     */
    boolean deleteUserFriendRelation(Long userId, Long friendId);

    /**
     * 查询用户关注列表
     * @param query
     * @return
     */
    List<UserFriendInfo> searchUserFriendInfoList(UserFriendQuery query);

    /**
     * 查询当前用户粉丝列表
     * @param query
     * @return
     */
    List<UserFriendInfo> searchUserFansInfoList(UserFriendQuery query);

    /**
     * 获取所有互关对象
     *
     * @param userId
     * @return
     */
    List<Long> queryFriendIdList(Long userId);

    /**
     * 判断userId  是否 已经关注 friend
     * @param userId
     * @param friendId
     * @return
     */
    boolean checkUserFriend(Long userId, Long friendId);
}

